在认证过程中验证域名和子域名输入字段
在添加子域名输入字段时(如在 OAuth 实现中常见),强烈建议进行额外的验证,以防止潜在的安全漏洞。如果未加以考虑,攻击者可能利用恶意构造的子域名字段(如 attacker-domain.com/),从而将 OAuth 连接请求重定向到攻击者控制的域名(因为 attacker-domain.com/.your-domain.com 会解析到攻击者的域名,而不是预期的域名)。通过采取以下步骤,可以防止攻击者访问您的集成中的敏感认证信息,例如 OAuth 客户端 ID 或密钥。
先决条件
-
使用预配置的令牌或密钥值的认证方法(例如,OAuth 2)
-
用户在 Zapier 中进行认证时能够输入域名或子域名
-
您的集成存储了敏感的认证细节(例如,在环境变量中),这些细节用作认证过程的一部分
步骤
-
如果您的集成允许用户提供域名,请针对允许列表中的可信域名对输入进行验证。
-
如果您的集成允许用户提供子域名,请在将该值包含到 OAuth HTTP 请求中时,为子域名字符串添加条件验证。此更改将防止子域名漏洞被潜在利用。
在 Platform UI 中处理子域名验证
-
更新“访问令牌请求”以及 OAuth v2 端点配置选项下的相关部分,使用 Code Mode 编辑器。
-
在使用 Platform UI 通过 Code Mode 构建的集成中处理子域名验证的示例代码:
// --- 更新:在使用子域名字段之前添加您的验证 ---if(!/^[a-z0-9-]+$/.test(bundle.authData.yourSubdomainField)) {throw new Error("子域名只能包含字母、数字和破折号 (-)。");}const options = {url: `https://${bundle.inputData.yourSubdomainField}.mydomain.com/oauth/access-token`,method: 'POST',json: {'code': bundle.inputData.code,'client_id': process.env.CLIENT_ID,'client_secret': process.env.CLIENT_SECRET,'grant_type': 'authorization_code',},}return z.request(options).then((response) => {const results = response.json;return results.data;});
在 Platform CLI 中处理子域名验证
-
如果您使用基于 OAuth 的认证,请更新
getAccessToken
和可选的refreshAccessToken
配置方法。如果集成使用 简写 HTTP 请求,请切换到 手动 HTTP 请求,以执行此手动子域名验证。 -
在使用 Platform CLI 构建的集成中处理子域名验证的示例代码:
const refreshAccessToken = async (z, bundle) => {// --- 更新:在使用子域名字段之前添加您的验证 ---if (!/^[a-z0-9-]+$/.test(bundle.authData.yourSubdomainField)) {throw new Error("子域名只能包含字母、数字和破折号 (-)。");}const response = await z.request({url: `https://${bundle.authData.yourSubdomainField}.mydomain.com/oauth/token`,method: "POST",body: {client_id: process.env.CLIENT_ID,client_secret: process.env.CLIENT_SECRET,grant_type: "refresh_token",refresh_token: bundle.authData.refresh_token,redirect_uri: bundle.inputData.redirect_uri,},});return {access_token: response.data.access_token,refresh_token: response.data.refresh_token,};};
需要帮助?告诉我们您的问题,我们会为您连接合适的资源或联系支持团队。